Routerify
The Routerify
provides a lightweight, idiomatic, composable and modular router implementation with middleware support for the Rust HTTP library hyper.rs.
There are a lot of web server frameworks for Rust applications out there and hyper.rs being comparably very fast and ready for production use
is one of them, and it provides only low level API. It doesn't provide any complex routing feature. So, Routerify
extends the hyper.rs library
by providing that missing feature without compromising any performance.
The Routerify
offers the following features:
- 📡 Allows defining complex routing logic.
- 🔨 Provides middleware support.
- 🌀 Supports Route Parameters.
- 🚀 Fast as it's using
RegexSet
to match routes. - 🍺 It supports any response body type as long as it implements the HttpBody trait.
- ❗ Provides a flexible error handling strategy.
- 💁 Provides
WebSocket
support out of the box. - 🔥 Allows data/state sharing across the route and middleware handlers.
- 🍗 Exhaustive examples and well documented.
To generate a quick server app using Routerify and hyper.rs, please check out hyper-routerify-server-template.
Benchmarks
Framework | Language | Requests/sec |
---|---|---|
hyper v0.13 | Rust 1.43.0 | 112,557 |
routerify v1.1 with hyper v0.13 | Rust 1.43.0 | 112,320 |
gotham v0.4.0 | Rust 1.43.0 | 100,097 |
actix-web v2 | Rust 1.43.0 | 96,397 |
warp v0.2 | Rust 1.43.0 | 81,912 |
go-httprouter, branch master | Go 1.13.7 | 74,958 |
Rocket, branch async | Rust 1.43.0 | 2,041 ? |
For more info, please visit Benchmarks.
Install
Add this to your Cargo.toml
file:
[]
= "1.1"
Basic Example
A simple example using Routerify
with hyper.rs would look like the following:
use ;
// Import the routerify prelude traits.
use *;
use ;
use ;
// Define an app state to share it across the route handlers and middlewares.
;
// A handler for "/" page.
async
// A handler for "/users/:userId" page.
async
// A middleware which logs an http request.
async
// Define an error handler function which will accept the `routerify::Error`
// and the request information and generates an appropriate response.
async
// Create a `Router<Body, Infallible>` for response body type `hyper::Body`
// and for handler error type `Infallible`.
async
Documentation
Please visit: Docs for an exhaustive documentation.
Examples
The common examples.
Contributing
Your PRs and suggestions are always welcome.